package com.xqzgj.system.service;

import java.util.List;
import java.util.Map;
import com.xqzgj.system.domain.StockRecord;

/**
 * 库存记录Service接口
 * 
 * @author xqzgj
 * @date 2024-03-25
 */
public interface IStockRecordService {
    /**
     * 查询库存记录列表
     * 
     * @param stockRecord 库存记录信息
     * @return 库存记录集合
     */
    public List<StockRecord> selectStockRecordList(StockRecord stockRecord);

    /**
     * 根据ID查询库存记录
     * 
     * @param id 库存记录ID
     * @return 库存记录
     */
    public StockRecord selectStockRecordById(Long id);

    /**
     * 新增库存记录
     * 
     * @param stockRecord 库存记录信息
     * @return 结果
     */
    public int insertStockRecord(StockRecord stockRecord);

    /**
     * 修改库存记录
     * 
     * @param stockRecord 库存记录信息
     * @return 结果
     */
    public int updateStockRecord(StockRecord stockRecord);

    /**
     * 批量删除库存记录
     * 
     * @param ids 需要删除的库存记录ID
     * @return 结果
     */
    public int deleteStockRecordByIds(Long[] ids);

    /**
     * 删除库存记录信息
     * 
     * @param id 库存记录ID
     * @return 结果
     */
    public int deleteStockRecordById(Long id);

    /**
     * 审批库存记录
     * 
     * @param stockRecord 库存记录信息
     * @return 结果
     */
    public int approveStockRecord(StockRecord stockRecord);

    /**
     * 取消库存记录
     * 
     * @param stockRecord 库存记录信息
     * @return 结果
     */
    public int cancelStockRecord(StockRecord stockRecord);

    /**
     * 查询本月入库量
     */
    public Long selectMonthlyInStock();

    /**
     * 查询本月出库量
     */
    public Long selectMonthlyOutStock();

    /**
     * 查询日期范围
     */
    public List<String> selectDateRange(String startDate, String endDate);

    /**
     * 查询入库趋势数据
     */
    public List<Map<String, Object>> selectInStockTrend(String startDate, String endDate);

    /**
     * 查询出库趋势数据
     */
    public List<Map<String, Object>> selectOutStockTrend(String startDate, String endDate);

    /**
     * 查询入库出库对比数据
     */
    public Map<String, Object> selectInOutComparison(String startDate, String endDate);

    /**
     * 查询变动类型分布
     */
    public List<Map<String, Object>> selectTypeDistribution(String startDate, String endDate);

    /**
     * 查询变动类型趋势
     */
    public List<Map<String, Object>> selectTypeTrend(String startDate, String endDate);
}